home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 38 / Amiga Format CD38 (1999-03-15)(Future Publishing)(GB)(Track 1 of 3)[!][issue 1999-04].iso / -seriously_amiga- / programming / other / ira_src / ira20_1.s < prev    next >
Text File  |  1999-02-03  |  3KB  |  217 lines

  1. ;*******************************************************************
  2. ;Assembler-Routinen fuer IRA (c)1991,92,93 Tim Ruehsen
  3. ;Stand       : 13.07.1993
  4. ;Compiler    : SAS/C V5.1
  5. ;Generierung : asm -s ira20_1.s
  6. ;*******************************************************************
  7.  
  8.     CSECT    text,0,,1,2
  9.  
  10. ;*******************************************************************
  11. ;Ein :A0 = Quellbereich (from)
  12. ;     A1 = Zielbereich  (to)
  13. ;     D0 = Anzahl zu kopierender Langworte
  14.  
  15.     XDEF    _lmovmem
  16. _lmovmem:
  17.     tst.l    d0
  18.     ble.s    lmm_ende
  19.     cmpa.l    A0,A1
  20.     bcs.s    lmm_l2
  21.     move.l    d0,d1
  22.     lsl.l    #2,D1
  23.     add.l    D1,A0
  24.     add.l    D1,A1
  25. lmm_l1:
  26.     move.l    -(A0),-(A1)
  27.     subq.l    #1,d0
  28.     bne.s    lmm_l1
  29. lmm_ende:
  30.     rts
  31. lmm_l2:
  32.     move.l    (A0)+,(A1)+
  33.     subq.l    #1,d0
  34.     bne.s    lmm_l2
  35.     rts
  36.  
  37. ;*******************************************************************
  38. ;Ein :D0 = Integer (32Bit)
  39. ;Aus :D0 = Adresse der Zeichenkette
  40. ;
  41.     XDEF    _itoa
  42. _itoa:
  43.     lea    _itoabuf+11(a4),a0
  44.     tst.l    d0
  45.     bne    .0_9
  46.  
  47.     ; Bei Null nur '0' schreiben und zurueck
  48.     move.b    #48,(a0)
  49.     move.l    a0,d0
  50.     rts
  51.  
  52.     ; Bei negativem Wert negieren
  53. .0_9
  54.     movem.l    d2/d3,-(a7)
  55.     move.l    d0,a1
  56.     bge    .0_11
  57.     neg.l    d0
  58.  
  59. .0_11
  60.     move.l    #10,d1
  61. .0_12
  62.     MOVE    D0,D2
  63.     CLR    D0
  64.     SWAP    D0
  65.     DIVU    D1,D0
  66.     MOVE.L    D0,D3
  67.     MOVE    D2,D3
  68.     DIVU    D1,D3
  69.     SWAP    D0
  70.     MOVE    D3,D0  ;long/10
  71.     SWAP    D3     ;long%10
  72.  
  73.     add.b    #48,d3
  74.     move.b    d3,(a0)
  75.     sub.l    #1,a0
  76.     tst.l    d0
  77.     bne    .0_12
  78.  
  79.     movem.l    (a7)+,d2/d3
  80.     move.l    a0,d0
  81.     move.l    a1,d1
  82.     bge    .0_14
  83.     move.b    #45,(a0)
  84.     rts
  85. .0_14
  86.     add.l    #1,d0
  87.     rts
  88.  
  89.  
  90. ;*******************************************************************
  91. ;EIN: D0.32 = Integerwert
  92. ;     D1.32 = Laenge der auszugebenden Zeichen
  93. ;AUS: D0    = Zeiger auf Zeichenkette
  94.  
  95.     XDEF    _itohex
  96. _itohex:
  97.     move.l    d2,-(a7)
  98.     move.l    d1,d2
  99.     move.l    d0,d1
  100.     lea    _itoxbuf(a4),a0
  101.     move.b    #0,0(a0,d2)
  102.     subq.l    #1,d2
  103. .1_1    
  104.     move.b    d1,d0
  105.     and.b    #$0f,d0
  106.     add.b    #48,d0
  107.     cmp.b    #57,d0
  108.     bls.s    .1_2
  109.     add.b    #7,d0
  110. .1_2
  111.     move.b    d0,0(a0,d2)
  112.     asr.l    #4,d1
  113.     dbra    d2,.1_1
  114.     move.l    a0,d0
  115.     move.l    (a7)+,d2
  116.     rts
  117.  
  118.  
  119. ;*******************************************************************
  120. ;EIN: A0 = Zeiger auf Zeichenkette
  121. ;
  122.     XDEF    _mnecat
  123. _mnecat:
  124.     lea    _mnebuf(a4),a1
  125.     moveq    #0,d0
  126.     tst.b    (a1)
  127.     beq    .2_1
  128.     move.w    _mnecnt(a4),d0
  129. .2_1
  130.     move.l    a1,d1
  131.     add.l    d0,a1
  132. .2_2
  133.     move.b    (a0)+,(a1)+
  134.     bne    .2_2
  135.  
  136.     sub.l    d1,a1
  137.     subq.l    #1,a1
  138.     move.l    a1,d0
  139.     move.w    d0,_mnecnt(a4)
  140.     rts
  141.  
  142.  
  143. ;*******************************************************************
  144. ;EIN: A0 = Zeiger auf Zeichenkette
  145.  
  146.     XDEF    _adrcat
  147. _adrcat:
  148.     lea    _adrbuf(a4),a1
  149.     moveq    #0,d0
  150.     tst.b    (a1)
  151.     beq    .3_1
  152.     move.w    _adrcnt(a4),d0
  153. .3_1
  154.     move.l    a1,d1
  155.     add.l    d0,a1
  156. .3_2
  157.     move.b    (a0)+,(a1)+
  158.     bne    .3_2
  159.  
  160.     sub.l    d1,a1
  161.     subq.l    #1,a1
  162.     move.l    a1,d0
  163.     move.w    d0,_adrcnt(a4)
  164.     rts
  165.  
  166. ;*******************************************************************
  167. ;EIN: A0 = Zeiger auf Zeichenkette
  168.  
  169.     XDEF    _dtacat
  170. _dtacat:
  171.     lea    _dtabuf(a4),a1
  172.     moveq    #0,d0
  173.     tst.b    (a1)
  174.     beq    .4_1
  175.     move.w    _dtacnt(a4),d0
  176. .4_1
  177.     move.l    a1,d1
  178.     add.l    d0,a1
  179. .4_2
  180.     move.b    (a0)+,(a1)+
  181.     bne    .4_2
  182.  
  183.     sub.l    d1,a1
  184.     subq.l    #1,a1
  185.     move.l    a1,d0
  186.     move.w    d0,_dtacnt(a4)
  187.     rts
  188.  
  189.  
  190. ;*******************************************************************
  191.  
  192.  
  193.     CSECT    __MERGED,1,,2,2
  194.     XDEF    _mnebuf
  195.     XDEF    _adrbuf
  196.     XDEF    _dtabuf
  197.  
  198.     CNOP    0,2
  199. _mnebuf:
  200.     ds.b    32
  201. _dtabuf:
  202.     ds.b    96    ;bei MOVEM 30,47 = 78 + 1x 0-Byte + 1xLaenge
  203. _adrbuf:
  204.     ds.b    64    ;50 Bytes + 1x 0-Byte + 1xLaenge
  205. _adrcnt:
  206.     dc.w    0
  207. _mnecnt:
  208.     dc.w    0
  209. _dtacnt:
  210.     dc.w    0
  211. _itoxbuf:
  212.     ds.b    9
  213. _itoabuf:
  214.     ds.b    12
  215.  
  216.     end
  217.